Skip to content
This repository was archived by the owner on Aug 5, 2026. It is now read-only.

chore: Replace local definition of EnsTokens with ensnode-sdk types - #208

Open
Y3drk wants to merge 8 commits into
mainfrom
y3drk/chore/use-enstokens-from-ensnodesdk
Open

Y3drk wants to merge 8 commits into
mainfrom
y3drk/chore/use-enstokens-from-ensnodesdk

Conversation

@Y3drk

@Y3drk Y3drk commented May 8, 2026

Copy link
Copy Markdown
Contributor

Lite PR → Replace local definition of EnsTokens with ensnode-sdk types

Summary

  • Removed the local type definition of EnsTokens (see ensawards.org/data/shared/ensTokens.ts) and replaced it with Price type from ensnode-sdk, leveraging the parseEnsTokens function where necessary
  • Renamed the parseReferralProgramCurrency utility function to make the name more generic and moved it to a more appropriate place in ensawards.org/data/shared/currencies.ts

Why


Testing

  • Ran typecheck, lint, and test commands locally to ensure that the migration didn't break anything, and later confirmed that in our CI workflow
  • Verified that the UI didn't break after introducing changes using a local and Vercel previews (and refined discovered imperfections).

Pre-Review Checklist (Blocking)

  • This PR does not introduce significant changes and is low-risk to review quickly.

@Y3drk Y3drk self-assigned this May 8, 2026
Copilot AI review requested due to automatic review settings May 8, 2026 13:45
@Y3drk Y3drk added the ensawards ENSAwards related label May 8, 2026
@vercel

vercel Bot commented May 8, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ensawards.org Ready Ready Preview, Comment Jun 29, 2026 7:23am

@coderabbitai

coderabbitai Bot commented May 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR migrates award and incentive program financial fields from numeric EnsTokens to structured Price from @ensnode/ensnode-sdk, adds interpretCurrency() for human-readable values, updates sorting/validation/aggregation logic, converts test fixtures/data to parseEnsTokens(...), and updates UI formatting.

Changes

Type System Migration from EnsTokens to Price

Layer / File(s) Summary
Type Contracts
ensawards.org/data/awards/types.ts, ensawards.org/data/incentive-programs/types.ts
AwardFinancial.price and IncentiveProgramAwardPool.totalAwardPool retyped from EnsTokens to Price from @ensnode/ensnode-sdk.
Currency Interpretation Utility
ensawards.org/data/shared/currencies.ts
New interpretCurrency() converts smallest-unit Price.amount to human-readable numbers using currency decimals.
Core Logic Updates
ensawards.org/data/awards/utils.ts, ensawards.org/data/incentive-programs/utils.ts
sortFinancialAwardsByPrice(), isValidAwardValue(), and award sum/pool calculations enforce currency match and use interpreted numeric values for comparisons and sums.
Data Migration & Tests
ensawards.org/data/incentive-programs/ens-contract-naming-season/*, ensawards.org/data/awards/utils.test.ts
Award fixtures and tests updated to use parseEnsTokens("<amount>") and added validation tests for isValidAwardValue.
UI Component Updates
ensawards.org/src/components/*, ensawards.org/src/components/molecules/ReferralProgramEditionInfo.tsx
Components switch from deprecated helpers to interpretCurrency() for consistent currency display and formatting.
Type Alias Removal and Cleanup
ensawards.org/data/shared/ensTokens.ts, ensawards.org/src/utils/referralProgram.ts
Removed deprecated EnsTokens alias and legacy parsing export.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

javascript

Poem

🐰 I hopped through types and tokened streams,

Price now sings where numbers dreamed,
Decimals tamed and displays aligned,
Tests and UIs all redesigned,
A tiny rabbit cheers the code refined. 🥕🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: replacing the local EnsTokens type definition with the ensnode-sdk Price type.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The PR description clearly relates to the changeset, explaining the removal of local EnsTokens type, its replacement with Price from ensnode-sdk, and the refactoring of parseReferralProgramCurrency.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch y3drk/chore/use-enstokens-from-ensnodesdk

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates award/incentive-program and referral-program currency handling away from the local EnsTokens number type to @ensnode/ensnode-sdk’s Price model, centralizing “smallest-unit → display value” conversion in a shared helper.

Changes:

  • Replace EnsTokens usage with Price and use parseEnsTokens(...) where financial amounts are authored in data files.
  • Introduce interpretCurrency(Price) -> number in data/shared/currencies.ts and update UI to use it (replacing parseReferralProgramCurrency).
  • Update award/incentive-program utilities to operate on the new Price type.

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
ensawards.org/src/utils/referralProgram.ts Removes the old parseReferralProgramCurrency helper from this module.
ensawards.org/src/components/molecules/ReferralProgramEditionInfo.tsx Uses interpretCurrency for award-pool remaining display.
ensawards.org/src/components/atoms/cards/referrerCard/rev-share/index.tsx Replaces currency parsing with interpretCurrency across rev-share UI fields.
ensawards.org/src/components/atoms/cards/referrerCard/pie-split/index.tsx Uses interpretCurrency for pie-split award value display.
ensawards.org/src/components/atoms/cards/referralProgramEditionCard/shared.tsx Uses interpretCurrency for award-pool display in shared card components.
ensawards.org/src/components/atoms/cards/referralProgramEditionCard/rev-share/hero.tsx Switches rev-share hero min-threshold display to interpretCurrency.
ensawards.org/src/components/atoms/cards/contractNamingSeasonAwardCard/index.tsx Updates contract-naming award card to format/display Price values via interpretCurrency.
ensawards.org/data/shared/ensTokens.ts Removes the local EnsTokens type export (keeps formatters + conversion constant).
ensawards.org/data/shared/currencies.ts Adds interpretCurrency helper backed by getCurrencyInfo.
ensawards.org/data/incentive-programs/utils.ts Updates remaining-pool and sum calculations to work with Price via interpretCurrency.
ensawards.org/data/incentive-programs/types.ts Changes totalAwardPool type from EnsTokens to Price.
ensawards.org/data/incentive-programs/ens-contract-naming-season/index.ts Migrates authored award pool amount to parseEnsTokens.
ensawards.org/data/incentive-programs/ens-contract-naming-season/awards.ts Migrates authored award price values to parseEnsTokens.
ensawards.org/data/awards/utils.ts Updates sorting/validation helpers to accept Price and convert via interpretCurrency.
ensawards.org/data/awards/utils.test.ts Updates tests to construct award prices using parseEnsTokens.
ensawards.org/data/awards/types.ts Updates AwardFinancial.price type from EnsTokens to Price.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ensawards.org/data/awards/utils.ts Outdated
Comment thread ensawards.org/data/awards/utils.ts Outdated
Comment thread ensawards.org/data/awards/utils.ts
Comment thread ensawards.org/data/awards/types.ts
Comment thread ensawards.org/data/incentive-programs/utils.ts
Comment thread ensawards.org/data/incentive-programs/utils.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
ensawards.org/src/components/atoms/cards/referrerCard/rev-share/index.tsx (1)

136-146: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing negative-value guard for additionalRevenueRequiredInUSD.

The userFacingAdditionalRevenueRequired guard at line 145 only maps "$0.00""$0.01" but doesn't clamp negative amounts. If a data inconsistency causes referrer.totalBaseRevenueContribution.amount > editionRules.minBaseRevenueContribution.amount while !referrer.isQualified, the tooltip renders "must achieve at least an additional US -$50.00".

Additionally, the inline Price-shaped object mixes .amount from two different Price instances while taking .currency only from minBaseRevenueContribution. If the two prices ever have different currencies, the arithmetic is silently incorrect.

🛡️ Proposed fix
-const additionalRevenueRequiredInUSD = usdFormatter.format(
-  interpretCurrency({
-    currency: editionRules.minBaseRevenueContribution.currency,
-    amount:
-      editionRules.minBaseRevenueContribution.amount -
-      referrer.totalBaseRevenueContribution.amount,
-  }),
-);
-
-const userFacingAdditionalRevenueRequired =
-  additionalRevenueRequiredInUSD === "$0.00" ? "$0.01" : additionalRevenueRequiredInUSD;
+const additionalRevenueRequired = Math.max(
+  0,
+  interpretCurrency(editionRules.minBaseRevenueContribution) -
+    interpretCurrency(referrer.totalBaseRevenueContribution),
+);
+const additionalRevenueRequiredInUSD = usdFormatter.format(additionalRevenueRequired);
+const userFacingAdditionalRevenueRequired =
+  additionalRevenueRequiredInUSD === "$0.00" ? "$0.01" : additionalRevenueRequiredInUSD;

This also removes the fragile inline Price object construction that directly couples to internal SDK fields.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ensawards.org/src/components/atoms/cards/referrerCard/rev-share/index.tsx`
around lines 136 - 146, The guard for additionalRevenueRequiredInUSD is
incomplete and you also construct a fragile inline Price by mixing fields from
editionRules.minBaseRevenueContribution and
referrer.totalBaseRevenueContribution; update the calculation so you first
compute a numeric delta only when both prices share the same currency (compare
editionRules.minBaseRevenueContribution.currency with
referrer.totalBaseRevenueContribution.currency) and clamp negative deltas to
zero, then pass that non-negative numeric amount and the correct currency into
interpretCurrency/usdFormatter to produce additionalRevenueRequiredInUSD;
finally, set userFacingAdditionalRevenueRequired to "$0.01" when the formatted
USD equals "$0.00" (after clamping) so the tooltip never shows negative values
or mixes currencies.
ensawards.org/data/incentive-programs/utils.ts (1)

29-36: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Consider using an explicit type predicate for version-agnostic type narrowing.

The .filter() at line 31 relies on TypeScript 5.5+ discriminated-union auto-narrowing to safely access award.price on line 34. While this works with modern TypeScript, an explicit type predicate would harden the code against older versions and improve clarity:

Recommended alternative with explicit type predicate
 import { type Award, AwardTypes } from "data/awards/types";
 import { INCENTIVE_PROGRAMS } from "data/incentive-programs";
 import type { IncentiveProgram, IncentiveProgramSlug } from "data/incentive-programs/types";
 import { interpretCurrency } from "data/shared/currencies";
+
+const isFinancialAward = (award: Award): award is AwardFinancial =>
+  award.type === AwardTypes.FinancialAward;

 const incentiveProgramFinancialAwards = getAwardsByIncentiveProgramSlug(
   incentiveProgramSlug,
-).filter((award) => award.type === AwardTypes.FinancialAward);
+).filter(isFinancialAward);

Also add AwardFinancial to the import from data/awards/types.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ensawards.org/data/incentive-programs/utils.ts` around lines 29 - 36, Replace
the implicit narrowing in the filter with an explicit type predicate so the
result is statically recognized as financial awards: import AwardFinancial from
data/awards/types (add AwardFinancial to the existing import) and change the
filter callback on getAwardsByIncentiveProgramSlug(incentiveProgramSlug) to use
a predicate signature (e.g., (award): award is AwardFinancial => award.type ===
AwardTypes.FinancialAward) so that interpretCurrency(award.price) is safe
regardless of TypeScript version.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ensawards.org/data/awards/utils.test.ts`:
- Around line 5-8: Add tests for isValidAwardValue by constructing Price values
via parseEnsTokens and asserting expected booleans: call
isValidAwardValue(parseEnsTokens("0")) -> false,
isValidAwardValue(parseEnsTokens("-1")) -> false, and
isValidAwardValue(parseEnsTokens("1")) (or another positive amount) -> true;
place these assertions alongside existing tests for sortFinancialAwardsByPrice
and import/use parseEnsTokens and isValidAwardValue to exercise the updated
signature.

In `@ensawards.org/data/shared/currencies.ts`:
- Around line 19-22: interpretCurrency currently converts value.amount to number
causing precision loss; change it to avoid Number(...) and instead produce an
exact, lossless representation (either a bigint in smallest units or an exact
decimal string) using value.amount (bigint) and
getCurrencyInfo(value.currency).decimals; specifically, read value.amount as
bigint, compute integer and fractional parts via bigint division and remainder
with 10**decimals, format and return an exact decimal string (or return the raw
bigint smallest-unit value and expose decimals) so downstream sorting/summing
use bigint/exact strings and only coerce to number at UI formatting boundaries;
update callers to expect the new return shape.

---

Outside diff comments:
In `@ensawards.org/data/incentive-programs/utils.ts`:
- Around line 29-36: Replace the implicit narrowing in the filter with an
explicit type predicate so the result is statically recognized as financial
awards: import AwardFinancial from data/awards/types (add AwardFinancial to the
existing import) and change the filter callback on
getAwardsByIncentiveProgramSlug(incentiveProgramSlug) to use a predicate
signature (e.g., (award): award is AwardFinancial => award.type ===
AwardTypes.FinancialAward) so that interpretCurrency(award.price) is safe
regardless of TypeScript version.

In `@ensawards.org/src/components/atoms/cards/referrerCard/rev-share/index.tsx`:
- Around line 136-146: The guard for additionalRevenueRequiredInUSD is
incomplete and you also construct a fragile inline Price by mixing fields from
editionRules.minBaseRevenueContribution and
referrer.totalBaseRevenueContribution; update the calculation so you first
compute a numeric delta only when both prices share the same currency (compare
editionRules.minBaseRevenueContribution.currency with
referrer.totalBaseRevenueContribution.currency) and clamp negative deltas to
zero, then pass that non-negative numeric amount and the correct currency into
interpretCurrency/usdFormatter to produce additionalRevenueRequiredInUSD;
finally, set userFacingAdditionalRevenueRequired to "$0.01" when the formatted
USD equals "$0.00" (after clamping) so the tooltip never shows negative values
or mixes currencies.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9012b5e4-f48e-424b-a347-bde8dc3552da

📥 Commits

Reviewing files that changed from the base of the PR and between 0269848 and ca02a96.

📒 Files selected for processing (16)
  • ensawards.org/data/awards/types.ts
  • ensawards.org/data/awards/utils.test.ts
  • ensawards.org/data/awards/utils.ts
  • ensawards.org/data/incentive-programs/ens-contract-naming-season/awards.ts
  • ensawards.org/data/incentive-programs/ens-contract-naming-season/index.ts
  • ensawards.org/data/incentive-programs/types.ts
  • ensawards.org/data/incentive-programs/utils.ts
  • ensawards.org/data/shared/currencies.ts
  • ensawards.org/data/shared/ensTokens.ts
  • ensawards.org/src/components/atoms/cards/contractNamingSeasonAwardCard/index.tsx
  • ensawards.org/src/components/atoms/cards/referralProgramEditionCard/rev-share/hero.tsx
  • ensawards.org/src/components/atoms/cards/referralProgramEditionCard/shared.tsx
  • ensawards.org/src/components/atoms/cards/referrerCard/pie-split/index.tsx
  • ensawards.org/src/components/atoms/cards/referrerCard/rev-share/index.tsx
  • ensawards.org/src/components/molecules/ReferralProgramEditionInfo.tsx
  • ensawards.org/src/utils/referralProgram.ts
💤 Files with no reviewable changes (2)
  • ensawards.org/data/shared/ensTokens.ts
  • ensawards.org/src/utils/referralProgram.ts

Comment thread ensawards.org/data/awards/utils.test.ts Outdated
Comment thread ensawards.org/data/shared/currencies.ts
@Y3drk Y3drk linked an issue May 11, 2026 that may be closed by this pull request
1 task

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ensawards.org/data/awards/utils.ts`:
- Line 41: interpretCurrency returns a number but the code compares
interpretedAmount to a bigint (0n); update the comparison in the boolean return
to use 0 (number) instead of 0n so the expression reads
Number.isFinite(interpretedAmount) && interpretedAmount > 0, referencing the
interpretedAmount variable and the interpretCurrency usage.

In `@ensawards.org/data/incentive-programs/utils.ts`:
- Around line 37-40: The reduce that computes totalFinancialAwards must validate
that every award.price.currency matches before summing to avoid mixing
currencies; update the logic in the incentiveProgramFinancialAwards reduction
(or extract to a helper used by totalFinancialAwards) to check
award.price.currency against the initial currency
(incentiveProgramFinancialAwards[0].price.currency) and throw an error (same
behavior as sortFinancialAwardsByPrice) if any mismatch is found, otherwise sum
amounts as currently implemented.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: dc139069-df94-4f5c-b116-1e2f2daaf7e1

📥 Commits

Reviewing files that changed from the base of the PR and between ca02a96 and ba3713e.

📒 Files selected for processing (3)
  • ensawards.org/data/awards/utils.test.ts
  • ensawards.org/data/awards/utils.ts
  • ensawards.org/data/incentive-programs/utils.ts

Comment thread ensawards.org/data/awards/utils.ts Outdated
Comment thread ensawards.org/data/incentive-programs/utils.ts
Comment thread ensawards.org/data/awards/utils.ts Outdated
Comment thread ensawards.org/data/incentive-programs/utils.ts
Copilot AI review requested due to automatic review settings May 13, 2026 07:52
@Y3drk
Y3drk marked this pull request as ready for review May 13, 2026 07:52
@Y3drk
Y3drk requested a review from a team as a code owner May 13, 2026 07:52
@greptile-apps

greptile-apps Bot commented May 13, 2026

Copy link
Copy Markdown

Greptile Summary

This PR moves ENS award values onto the SDK Price model. The main changes are:

  • Replaced local ENS token number types with Price values.
  • Added shared currency interpretation for award and referral-program displays.
  • Updated ENS Contract Naming Season award data to use parseEnsTokens.
  • Added tests for award value validity and award-pool currency consistency.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
ensawards.org/data/awards/utils.ts Updates award sorting and value validation to work with SDK Price values.
ensawards.org/data/incentive-programs/utils.ts Updates award-pool totals and remaining-pool math to interpret Price amounts.
ensawards.org/data/shared/currencies.ts Adds the shared helper for converting SDK currency amounts into display numbers.

Reviews (6): Last reviewed commit: "Apply 06/25/26 GitHub review suggestion" | Re-trigger Greptile

Comment on lines +37 to +42
const totalFinancialAwards = incentiveProgramFinancialAwards.reduce(
(acc, award) => ({ currency: acc.currency, amount: acc.amount + award.price.amount }),
{ currency: incentiveProgramFinancialAwards[0].price.currency, amount: 0n },
);

return interpretCurrency(totalFinancialAwards);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Currency consistency not enforced at runtime

sumIncentiveProgramFinancialAwards initialises the accumulator currency from incentiveProgramFinancialAwards[0].price.currency and then sums every award's price.amount without checking whether subsequent awards share that currency. If awards in a program ever mix currencies, the function silently produces a numerically incorrect result — the ENS-wei and USDC-smallest-unit amounts would be added together and then interpreted under a single currency denomination. The test in index.test.ts guards this invariant, but the function itself never throws. sortFinancialAwardsByPrice (in the same PR) throws when currencies differ, so applying the same guard here would make the safety contract consistent.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The way this function is constructed makes it impossible to sum amounts of different currencies if the added unit test passes (the invariant is met).

That's why it's not necessary to add the guard here.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair point. If the unit test enforces that all awards within an incentive program share the same currency, and the data is controlled (not user-supplied), then the function's precondition is validated at the test boundary rather than at runtime. The current structure is reasonable.

The inconsistency with sortFinancialAwardsByPrice throwing on mixed currencies is worth noting, but you're right that it's not strictly necessary here given the invariant is covered by the test.

Tip: You can give me more context with .greptile/rules.md so I get this right next time.

Comment thread ensawards.org/data/awards/utils.ts

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 19 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

Comment thread ensawards.org/data/awards/utils.ts
Comment thread ensawards.org/data/awards/utils.ts
Copilot AI review requested due to automatic review settings June 25, 2026 10:40
@Y3drk

Y3drk commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 17 out of 17 changed files in this pull request and generated 3 comments.

Comment thread ensawards.org/data/incentive-programs/utils.ts
Comment thread ensawards.org/data/incentive-programs/index.test.ts Outdated
Comment thread ensawards.org/data/incentive-programs/types.ts
Comment thread ensawards.org/data/awards/utils.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 17 out of 17 changed files in this pull request and generated no new comments.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ensawards ENSAwards related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade to ENSNode v1.11.0

3 participants